home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / libq / IIatoi.c next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.3 KB  |  67 lines

  1. # include    <sccs.h>
  2.  
  3. SCCSID(@(#)IIatoi.c    8.1    12/31/84)
  4.  
  5.  
  6. /*
  7. **  IIatoi()
  8. **  ASCII CHARACTER STRING TO 16-BIT INTEGER CONVERSION
  9. **
  10. **    `a' is a pointer to the character string, `i' is a
  11. **    pointer to the word which is to contain the result.
  12. **
  13. **    The return value of the function is:
  14. **        zero:    succesful conversion; `i' contains the integer
  15. **        +1:    numeric overflow; `i' is unchanged
  16. **        -1:    syntax error; `i' is unchanged
  17. **
  18. **    A valid string is of the form:
  19. **        <space>* [+-] <space>* <digit>* <space>*
  20. **
  21. **        Eric's utility routine.
  22. **
  23. */
  24.  
  25. IIatoi(a1, i)
  26. char    *a1;
  27. int    *i;
  28. {
  29.     int        sign;        /* flag to indicate the sign */
  30.     register int    x;        /* holds the integer being formed */
  31.     register char    c;
  32.     register char    *a;
  33.  
  34.     a = a1;
  35.     sign = 0;
  36.     /* skip leading blanks */
  37.     while (*a == ' ')
  38.         a++;
  39.     /* check for sign */
  40.     switch (*a)
  41.     {
  42.  
  43.       case '-':
  44.         sign = -1;
  45.  
  46.       case '+':
  47.         while (*++a == ' ');
  48.     }
  49.  
  50.     /* at this point everything had better be numeric */
  51.     x = 0;
  52.     while ((c = *a) <= '9' && c >= '0')
  53.     {
  54.         if (x > 3276 || (x == 3276 && c > '7'))
  55.             return (1);        /* overflow */
  56.         x = x * 10 + c - '0';
  57.         a++;
  58.     }
  59.  
  60.     /* eaten all the numerics; better be all blanks */
  61.     while (c = *a++)
  62.         if(c != ' ')            /* syntax error */
  63.             return (-1);
  64.     *i = sign ? -x : x;
  65.     return (0);        /* successful termination */
  66. }
  67.